package com.otherTest.designpattern.creationalpattern.prototype;


/**
 * @Description: prototype原型模式
 * 用原型实例指定创建对象的种类，并且通过复制这些原型创建新的对象
 *
 * new步骤
 * jvm 根据new 的对象分配内存空间，之后根据该对象的构造函数，填充对象的各个域,这一步骤就是对象的初始化
 * 构造方法返回后，将该对象的引用发布出去
 *
 * clone步骤
 * 第一步与new 相似 ，都是分配内存。当调用clone方法时，分配的的内存和源对象相同，然后用源对象的的对应的域，填充新对象的域
 * 填充完成后，clone方法返回新地址
 *
 * 如果属性是基本类型，拷贝的就是基本类型的值；如果属性是内存地址（引用类型），拷贝的就是内存地址 ，因此如果其中一个对象改变了这个地址，就会影响到另一个对象
 *
 * 浅拷贝：传递引用（用一个已知的实例对新创建的对象逐个赋值）
 * 深拷贝：创建并复制实例
 *
 * @author: conceit
 * @Date: 2018/9/3 14:06
 */
public class PrototypeMainTest {


    public static void main(String[] args) {

        ResumePrototype zhaohang=new ResumePrototype("zhaohang","",22,"","");
        System.out.println(zhaohang.toString());
        System.out.println(zhaohang.hashCode());

        ResumePrototype zhaohangCopy= (ResumePrototype) zhaohang.clone();
        System.out.println(zhaohangCopy.toString());
        System.out.println(zhaohangCopy.hashCode());


        System.out.println(zhaohang==zhaohangCopy);
        System.out.println(zhaohang.equals(zhaohangCopy));

    }



}
